package com.utils.parsetxt.file;

import java.io.File; 

/** 
 * 删除文件和目录 
 *  
 * @author chen 
 *  
 */  
 
public class deleteFiletool {
	 
//	static final Logger log = Logger.getLogger(deleteFiletool.class.getName());

	 /** 
	  * 删除文件，可以是文件或文件夹 
	  *  
	  * @param fileName 
	  *            要删除的文件名 
	  * @return 删除成功返回true，否则返回false 
	  */  
	 public static boolean delete(String fileName) {  
	  File file = new File(fileName);  
	  if (!file.exists()) {  
	   System.out.print("删除文件失败:" + fileName + "不存在！");  
	   return false;  
	  } else {  
	   if (file.isFile())  
	    return deleteFile(fileName);  
	   else  
	    return deleteDirectory(fileName);  
	  }  
	 }  
	  
	 /** 
	  * 删除单个文件 
	  *  
	  * @param fileName 
	  *            要删除的文件的文件名 
	  * @return 单个文件删除成功返回true，否则返回false 
	  */  
	 public static boolean deleteFile(String fileName) {  
	  File file = new File(fileName);  
	  // 如果文件路径所对应的文件存在，并且是一个文件，则直接删除  
	  if (file.exists() && file.isFile()) {  
	   if (file.delete()) {  
	    System.out.print("删除单个文件" + fileName + "成功！");  
	    return true;  
	   } else {  
	    System.out.print("删除单个文件" + fileName + "失败！");  
	    return false;  
	   }  
	  } else {  
	   System.out.print("删除单个文件失败：" + fileName + "不存在！");  
	   return false;  
	  }  
	 }  
	  
	 /** 
	  * 删除目录及目录下的文件 
	  *  
	  * @param dir 
	  *            要删除的目录的文件路径 
	  * @return 目录删除成功返回true，否则返回false 
	  */  
	 public static boolean deleteDirectory(String dir) {  
	  // 如果dir不以文件分隔符结尾，自动添加文件分隔符  
	  if (!dir.endsWith(File.separator))  
	   dir = dir + File.separator;  
	  File dirFile = new File(dir);  
	  // 如果dir对应的文件不存在，或者不是一个目录，则退出  
	  if ((!dirFile.exists()) || (!dirFile.isDirectory())) {  
	   System.out.print("删除目录失败：" + dir + "不存在！");  
	   return false;  
	  }  
	  boolean flag = true;  
	  // 删除文件夹中的所有文件包括子目录  
	  File[] files = dirFile.listFiles();  
	  for (int i = 0; i < files.length; i++) {  
	   // 删除子文件  
	   if (files[i].isFile()) {  
	    flag = deleteFiletool.deleteFile(files[i].getAbsolutePath());  
//	    if (!flag)  
//	     break;  
	   }  
	   // 删除子目录  
	   else if (files[i].isDirectory()) {  
	    flag = deleteFiletool.deleteDirectory(files[i]  
	      .getAbsolutePath());  
//	    if (!flag)  
//	     break;  
	   }  
	  }  
//	  if (!flag) {  
//	   System.out.print("删除目录失败！");  
//	   return false;  
//	  }  
	  // 删除当前目录  
	  if (dirFile.delete()) {  
	   System.out.print("删除目录" + dir + "成功！");  
	   return true;  
	  } else {  
	   return false;  
	  }  
	 }  
	 /**
	  * 删除目录及目录下的文件 ，删除不掉的就留着，继续删除下一个，都删除完了 返回true
	  *  （仅新反洗钱黑名单适用）
	  * @param dir 
	  *            要删除的目录的文件路径 
	  *        name 
	  *        	   要对比的名称
	  * @return 目录删除成功返回true，否则返回false 
	  * 
	  */
	 public static boolean deleteDirectoryTwo(String dir,String name){  
		  // 如果dir不以文件分隔符结尾，自动添加文件分隔符          （仅新反洗钱黑名单适用）
		  if (!dir.endsWith(File.separator))  
		   dir = dir + File.separator;  
		  File dirFile = new File(dir);  
		  // 如果dir对应的文件不存在，或者不是一个目录，则退出  
		  if ((!dirFile.exists()) || (!dirFile.isDirectory())) {  
		   System.out.print("删除目录失败：" + dir + "不存在！");  
		   return false;  
		  }  
		  // 删除文件夹中的所有文件包括子目录  
		  File[] files = dirFile.listFiles();  
		  for (int i = 0; i < files.length; i++) {  
		   // 删除子文件  
		   if (files[i].isFile()) {  
		     deleteFiletool.deleteFile(files[i].getAbsolutePath(),name);  
		   }  
		   // 删除子目录  
		   else if (files[i].isDirectory()) {  
		     deleteFiletool.deleteDirectoryTwo(files[i]  
		      .getAbsolutePath(),name);  
		   }  
		  }  
		  // 删除当前目录  
		  if (dirFile.delete()) {  
		   System.out.print("删除目录" + dir + "成功！");  
		   return true;  
		  } else {  
		   return false;  
		  }  
		 }
	 
	 /** 
	  * 删除单个文件 ,删除不掉的就留着，继续删除下一个，都删除完了 返回true 
	  *  （仅新反洗钱黑名单适用）
	  * @param fileName 
	  *            要删除的文件的文件名 
	  *        name 
	  *        	   要对比的名称
	  * @return 单个文件删除成功返回true，否则返回false 
	  */ 	 
	 private static boolean deleteFile(String fileName, String name) {
		  
		  File file = new File(fileName);  
		  // 如果文件路径所对应的文件存在，并且是一个文件，且与name字符串相匹配    则直接删了（仅新反洗钱黑名单适用）
		//  System.out.print("fileName.substring(fileName.lastIndexOf(\"_\")+1, fileName.length()-4="+fileName.substring(fileName.lastIndexOf("_")+1, fileName.length()-4));
		  if (file.exists() && file.isFile()&&
				  !(fileName.substring(fileName.lastIndexOf("_")+1, fileName.length()-4).equals(name))) {  
		   if (file.delete()) {  
		    System.out.print("删除单个文件" + fileName + "成功！");  
		    return true;  
		   } else {  
		    System.out.print("删除单个文件" + fileName + "失败！");  
		    return false;  
		   }  
		  } else {  
		   System.out.print("删除单个文件失败：" + fileName + "不存在或是当天的文件！");  
		   return false;  
		  }  
		 
	}

	public static void main(String[] args) {  
	  // 删除单个文件  
	  String file = "D://workspace//blackprocess//webapp//upload//upload_0_2016";  
	 String str= file.substring(file.lastIndexOf("_")+1, file.length());
//	  deleteFiletool.deleteFile(file);  
	  System.out.print("删除成功="+str);  
	  // 删除一个目录  
//	  String dir = "c:/test";  
//	  deleteFiletool.deleteDirectory(dir);  
	//  System.out.print();  
	//  // 删除文件  
	//  dir = "c:/test/test0";  
	//  DeleteFileUtil.delete(dir);  
	  
	 }  
	  
}
